package gold.gold02;

/**
 * 用左移右移试试?他这个数值区间, 好像就挺合适。
 */
public class S0507配对交换 {
    /**
     * 100, 大家都0ms。
     */
    public int exchangeBits(int num) {
        int[] result = new int[32];
        char[] numBin = Integer.toBinaryString(num).toCharArray();
        for(int i = 0; i < numBin.length; i++){
            if(numBin[numBin.length - 1 - i] == '1')
                result[31 - i] = 1;
        }
        for(int i = 0; i < 16; i ++){
            int tempInt = result[i*2 + 1];
            result[i*2 + 1] = result[i*2];
            result[i*2] = tempInt;
        }
        int resultInt = 0;
        for(int i = 0; i < 32; i++){
            if(result[i] == 1)
                resultInt += (int)Math.pow(2, 31 - i);
        }
        return resultInt;
    }

    /**
     * 100, 这个才对啊
     */
    public int exchangeBits2(int num) {
        // 注意这个odd, 第二位也是0, 因为符号位的考虑。
        int odd = 0b00010101010101010101010101010101;
        int even = 0b10101010101010101010101010101010;
        int oddNum = (num & odd) << 1;
        int evenNumn = (num & even) >> 1;
        return oddNum | evenNumn;
    }

}
